import os
import logging


def get_looger(filename, name=__name__):
    log_path = 'static/logs' # 日志文件的存储路径
    if not os.path.exists(log_path):
        os.makedirs(log_path) # 如果目录不存在，自动创建（递归创建多级目录）

    logger = logging.getLogger(name)# 根据名称创建日志器（相同名称会返回同一个实例）
    logger.setLevel(logging.DEBUG) # 设置日志器的全局级别：DEBUG及以上级别都会被处理
    # DEBUG（调试）、INFO（信息）、WARNING（警告）、ERROR（错误）、CRITICAL（严重错误）这五级日志都会被处理（低于 DEBUG 的不会被记录，但 Python 日志最低级别就是 DEBUG）。

    stream_handler = logging.StreamHandler() # 创建控制台处理器：负责将日志输出到控制台
    stream_handler.setLevel(logging.DEBUG)# 控制台处理器的级别：只处理 DEBUG 及以上

    # 设置控制台日志格式
    stream_handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
    # %(asctime)s（时间）、%(name)s（日志器名称）、%(levelname)s（日志级别）、%(message)s（日志内容），例如：
    # 2023-10-29 16:30:00 - my_module - DEBUG - 这是一条调试日志

    logger.addHandler(stream_handler)# 将处理器绑定到日志器

    # 创建文件处理器：负责将日志写入文件
    file_handler = logging.FileHandler(f'static/logs/{filename}', mode='w', encoding="utf8")
    file_handler.setLevel(logging.DEBUG)
    file_handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
    logger.addHandler(file_handler)

    return logger  # 其他地方调用该函数时，会得到一个可直接使用的日志器